home *** CD-ROM | disk | FTP | other *** search
- property pSpr, pOrigMember, pLidUpMember, pNoShadow, pPouring, pDragMember, pContents, pContentString, pGlassMask, pGlassIce, pIceAmount, pMaxIceIncrements, pLidUpNoIceMember, pLidUpWithIceMember, pThingName, pTilt, pCapacity, pIcePerScoop, pLidUp, pLidTimer, pLastDest, pGlassType, pFirstShake, pLastShake, pOverItem, pTimer, pShaken
- global gFloatSprite
-
- on beginSprite me
- pGlassType = #shaker
- pSpr = sprite(me.spriteNum)
- pOrigMember = pSpr.member
- pGlassIce = pSpr
- pGlassMask = pSpr
- pDragMember = nextMember(pSpr.member, 1)
- pLidUpNoIceMember = nextMember(pSpr.member, -1)
- pLidUpWithIceMember = nextMember(pSpr.member, -2)
- pNoShadow = nextMember(pSpr.member, -3)
- pCapacity = getCapacity(pGlassType)
- pMaxIceIncrements = 1
- pIcePerScoop = pCapacity / (2.0 * pMaxIceIncrements)
- mEmptyGlass(me)
- pLidUp = 0
- pOverItem = 0
- mReplaceIt(me)
- end
-
- on mSetNewTilt me, newTilt
- pTilt = newTilt
- if pTilt = #right then
- pDragMember = nextMember(pOrigMember, 1)
- else
- pDragMember = nextMember(pOrigMember, 11)
- end if
- return pDragMember
- end
-
- on mEmptyGlass me
- global gLastVessel
- if gLastVessel = pGlassType then
- setPourClockText(" The Shaker is Empty")
- end if
- pIceAmount = 0
- pContents = [:]
- pContentString = EMPTY
- pLastDest = VOID
- pLidUpMember = pLidUpNoIceMember
- end
-
- on mEmptyIfLastVessel me, barGlassSprite
- if pLastDest = barGlassSprite then
- mEmptyGlass(me)
- end if
- end
-
- on mReplaceTop me
- if pLidUp or (pSpr.member <> pOrigMember) then
- pLidUp = 0
- pLidTimer = VOID
- soundFX2("shaker_top_on", 0, 0)
- pSpr.member = pOrigMember
- end if
- end
-
- on mPopTop me, Force
- if not pLidUp then
- if not Force then
- if voidp(pLidTimer) then
- pLidTimer = nowTicks()
- exit
- else
- if ticksSince(pLidTimer) < 15 then
- exit
- end if
- end if
- end if
- soundFX2("shaker_top_off", 0, 0)
- pSpr.member = pLidUpMember
- pLidUp = 1
- mupdateDisplay(me)
- end if
- end
-
- on mouseEnter me
- pTimer = nowTicks()
- pOverItem = 1
- pLidTimer = VOID
- if draggingBarTopGlass() then
- exit
- end if
- showToolTip(pSpr, pGlassType)
- end
-
- on mupdateDisplay me
- global gLastVessel
- gLastVessel = pGlassType
- pContentString = buildVesselContentList(pSpr, pGlassType, " The Shaker is Empty")
- showDrinkContents(pGlassType, pContentString, VOID)
- end
-
- on mouseWithin me
- if draggingBottleOrSpoon() and not pPouring then
- mPopTop(me)
- else
- if draggingIngredient() then
- pTimer = nowTicks()
- else
- if tipTickRange(pTimer) then
- forceToolTip(pSpr, pGlassType)
- mupdateDisplay(me)
- else
- dismissToolTip()
- end if
- end if
- end if
- end
-
- on mouseLeave me
- if not pPouring and draggingBottleOrSpoon() then
- mReplaceTop(me)
- end if
- pOverItem = 0
- if not draggingSpoon() then
- hideToolTip()
- hideDrinkContents()
- end if
- end
-
- on mouseDown me
- if the doubleClick then
- exit
- end if
- if draggingBottleOrSpoon() and not pPouring then
- mPopTop(me, 1)
- if draggingBottleThang() then
- pourIt(mGetReceiveSound(me))
- end if
- else
- if pPouring then
- mReplaceIt(me)
- replaceDraggingAnything()
- else
- replaceDraggingAnything()
- pPouring = 1
- noShaking(me)
- pShaken = 0
- pSpr.member = pOrigMember
- sendSprite(gFloatSprite, #mPickUpBottle, pSpr, 1, VOID, pGlassType, mGetPourSound(me))
- pSpr.member = pNoShadow
- updateStage()
- pPouring = 1
- end if
- end if
- end
-
- on noShaking me
- pFirstShake = VOID
- pLastShake = VOID
- end
-
- on mGetReceiveSound me
- if mHasIce(me) then
- soundName = "water_into_shaker_wice"
- else
- soundName = "water_into_shaker"
- end if
- return soundName
- end
-
- on mGetPourSound me
- if mIsEmpty(me) then
- soundName = VOID
- else
- soundName = "strain_shaker_into_glass"
- end if
- return soundName
- end
-
- on mIsHoldingVolume me
- return calcContents(pContents)
- end
-
- on mIsHoldingLiquor me
- return calcLiquorContents(pContents)
- end
-
- on mIsHoldingLiquid me
- return calcLiquidContents(pContents)
- end
-
- on mIsHoldingPourable me
- return calcPourableContents(pContents)
- end
-
- on mIsEmpty me
- return calcEmpty(pContents)
- end
-
- on mHasIce me
- if voidp(pContents[#ice]) then
- return 0
- else
- return integer(pContents[#ice])
- end if
- end
-
- on overPourableItem me
- global gPourableItemsList
- repeat with X in gPourableItemsList
- if sendSprite(X, #mOverItem, pSpr, the mouseLoc) and (X <> pSpr.spriteNum) then
- return 1
- end if
- end repeat
- return 0
- end
-
- on exitFrame me
- global gSoundFX2chan
- if pPouring then
- if overPourableItem(me) or pShaken then
- gFloatSprite.member = pDragMember
- noShaking(me)
- exit
- end if
- if voidp(pFirstShake) then
- pFirstShake = the mouseLoc
- else
- if pLastShake = VOID then
- pLastShake = the mouseLoc
- else
- mousePos = the mouseLoc
- if (pFirstShake[1] < pLastShake[1]) and (mousePos[1] < pLastShake[1]) then
- shaking = 1
- else
- if (pFirstShake[1] > pLastShake[1]) and (mousePos[1] > pLastShake[1]) then
- shaking = 1
- else
- if (pFirstShake[2] < pLastShake[2]) and (mousePos[2] < pLastShake[2]) then
- shaking = 1
- else
- if (pFirstShake[2] > pLastShake[2]) and (mousePos[2] > pLastShake[2]) then
- shaking = 1
- else
- shaking = 0
- noShaking(me)
- end if
- end if
- end if
- end if
- end if
- end if
- if modifierDown() then
- shaking = 1
- end if
- if shaking then
- pShaken = 1
- if mIsEmpty(me) then
- else
- if mHasIce(me) then
- soundFX2("shaking_ice", 1, 0)
- else
- soundFX2("shaking_ice", 1, 0)
- end if
- end if
- oldMember = gFloatSprite.member
- repeat while soundBusy(gSoundFX2chan)
- gFloatSprite.member = member("shake_" & random(6))
- if onPC() then
- gFloatSprite.loc = the mouseLoc
- end if
- checkElapsedTime()
- updateStage()
- wait(2)
- end repeat
- shaking = 0
- noShaking(me)
- mShaken(me)
- gFloatSprite.member = oldMember
- if not overPourableItem(me) then
- gFloatSprite.member = pDragMember
- end if
- else
- stopSoundFX2()
- end if
- if not overPourableItem(me) then
- gFloatSprite.member = pDragMember
- end if
- end if
- end
-
- on mShaken
- pContents[#shake] = 1
- end
-
- on mStirred me
- if countStirrableIngredients(pContents) > 1 then
- pContents[#stir] = 1
- end if
- end
-
- on mOverItem me, bottleSprite, spoutLoc
- if pPouring then
- return 0
- else
- return inside(spoutLoc, pSpr.rect)
- end if
- end
-
- on mReplaceIt me
- pSpr.visible = 1
- pSpr.member = pOrigMember
- pPouring = 0
- pShaken = 0
- pTilt = #left
- noShaking(me)
- end
-
- on mFill me, ingredient, liquidColor
- return fillVessel(me, ingredient, liquidColor)
- end
-
- on mUpdateLiquidLevel me, masterSprite
- mFillLiquor(me, VOID, masterSprite)
- end
-
- on mFillLiquor me, liquidColor, masterSprite
- return 1
- end
-
- on mFillIce me, masterSprite
- newMem = VOID
- if pIceAmount > pMaxIceIncrements then
- alertBeep()
- return 0
- end if
- pLidUpMember = pLidUpWithIceMember
- pSpr.member = pLidUpMember
- return addIce(pSpr, masterSprite, pMaxIceIncrements, newMem, "ice_into_shaker1")
- end
-